﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity.Validation;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Sisco.AccesoDatos
{
    public class UsuarioDAO
    {
        SiscoEntities conexion;

        public List<USUARIO> Listar()
        {
            List<USUARIO> lista = new List<USUARIO>();

            using (conexion = new SiscoEntities())
            {
                lista = conexion.USUARIO.Include("EQUIPO").Include("PROBLEMA").Include("DEPARTAMENTO1").Where(x => x.ELIMINADO == 0).ToList();
                //lista = conexion.USUARIO.Where(x => x.ELIMINADO == 0).ToList();
            }

            return lista;
        }

        public int Registrar(USUARIO updUsuario)
        {
            int result = 0;
            
            using (conexion = new SiscoEntities())
            {
                conexion.USUARIO.Add(updUsuario);
                try
                {
                    result = conexion.SaveChanges();
                }
                catch (DbEntityValidationException dbEx)
                {
                    foreach (var validationErrors in dbEx.EntityValidationErrors)
                    {
                        foreach (var validationError in validationErrors.ValidationErrors)
                        {
                            Trace.TraceInformation("Property: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage);
                        }
                    }
                }

                return result;
            }
        }


        public int Modificar(USUARIO selectedUsuario, USUARIO updUsuario)
        {
            using (conexion = new SiscoEntities())
            {
                conexion.USUARIO.Attach(selectedUsuario);
                selectedUsuario.IDUSUARIO = updUsuario.IDUSUARIO;
                selectedUsuario.IDEMPRESA = updUsuario.IDEMPRESA;
                selectedUsuario.IDDEPARTAMENTO = updUsuario.IDDEPARTAMENTO;
                selectedUsuario.IDSUCURSAL = updUsuario.IDSUCURSAL;
                selectedUsuario.CODIGO_RRHH = updUsuario.CODIGO_RRHH;
                selectedUsuario.USUARIO_WINDOWS = updUsuario.USUARIO_WINDOWS;
                selectedUsuario.USUARIO_DBS = updUsuario.USUARIO_DBS;
                selectedUsuario.NOMBRES = updUsuario.NOMBRES;
                selectedUsuario.APELLIDOS = updUsuario.APELLIDOS;
                selectedUsuario.NOMBRECOMPLETO = updUsuario.NOMBRECOMPLETO;
                selectedUsuario.CORREO = updUsuario.CORREO;
                selectedUsuario.OFICINA = updUsuario.OFICINA;
                selectedUsuario.SUCURSAL = updUsuario.SUCURSAL;
                selectedUsuario.DEPARTAMENTO = updUsuario.DEPARTAMENTO;
                selectedUsuario.TELEFONO = updUsuario.TELEFONO;
                selectedUsuario.ANEXO = updUsuario.ANEXO;
                selectedUsuario.ELIMINADO = updUsuario.ELIMINADO;
                selectedUsuario.REPARADOR = updUsuario.REPARADOR;
                selectedUsuario.USUARIO_SIST = updUsuario.USUARIO_SIST;
                selectedUsuario.PASSWORD_SIST = updUsuario.PASSWORD_SIST;
                selectedUsuario.RPM = updUsuario.RPM;
                selectedUsuario.RPC = updUsuario.RPC;
                selectedUsuario.NEXTEL = updUsuario.NEXTEL;
                selectedUsuario.CELULAR = updUsuario.CELULAR;
                selectedUsuario.FECHAMODIFICACION = DateTime.Now;
                selectedUsuario.MODIFICADOPOR = updUsuario.MODIFICADOPOR;
                selectedUsuario.PERSCONTACTO = updUsuario.PERSCONTACTO;
                return conexion.SaveChanges();
            }
        }

        public System.Data.DataTable USP_ListarUsuario(int? idSucursal, int? idDpto)
        {
            DataTable result = new DataTable();

            result.Columns.Add("Id", Type.GetType("System.String"));
            result.Columns.Add("CodigoUsuario", Type.GetType("System.String"));
            result.Columns.Add("Nombres", Type.GetType("System.String"));
            result.Columns.Add("Apellidos", Type.GetType("System.String"));
            result.Columns.Add("Sucursal", Type.GetType("System.String"));
            result.Columns.Add("Departamento", Type.GetType("System.String"));
            result.Columns.Add("Telefono", Type.GetType("System.String"));

            using (conexion = new SiscoEntities())
            {
                var query = conexion.usp_Listar_Usuario_Rep(idSucursal, idDpto);

                DataRow dr;

                foreach (var c in query)
                {
                    dr = result.NewRow();

                    dr[0] = c.Id.ToString();
                    dr[1] = c.CodigoUsuario != null ? c.CodigoUsuario.Trim() : string.Empty;
                    dr[2] = c.Nombres != null ? c.Nombres.Trim() : string.Empty;
                    dr[3] = c.Apellidos != null ? c.Apellidos.Trim() : string.Empty;
                    dr[4] = c.Sucursal != null ? c.Sucursal.Trim() : string.Empty;
                    dr[5] = c.Departamento != null ? c.Departamento.Trim() : string.Empty;
                    dr[6] = c.Telefono != null ? c.Telefono.Trim() : string.Empty;

                    result.Rows.Add(dr);
                }

                return result;
            }
        }
    }
}
